/*
 * Copyright (C) 2020 The LINN Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */

package com.juqimiao.linn.transfer.query;


import com.juqimiao.linn.transfer.Response;
import com.juqimiao.linn.transfer.query.builders.BaseResponseBuilder;
import com.juqimiao.linn.transfer.query.builders.QueryResponseBuilder;

/**
 * 为请求业务数据提供的响应类。它会承载多种不同的数据类型。
 * <p>
 *     无法被外部包直接初始化，推荐使用 基于{@link BaseResponseBuilder}的Builder创建Response对象。
 *     当前类可以直接使用{@link QueryResponseBuilder} 进行实现。
 *</p>
 * <p>
 *     当data字段为集合或Hash集合的时候，可以设置total以便为分页提供支持。
 *     默认情况下：total为-1，表示不适用于或没有对分页提供支持。
 * </p>
 * @param <T> 数据类型。
 *
 * @author Collin Cai
 */
public class QueryResponse<T> extends Response {

    private T data;
    private int total = -1;

    /**
     * 默认构造函数。
     */
    public QueryResponse() {
    }

    /**
     * 获取数据。
     *
     * @return 表示单个对象或集合。
     */
    public T getData() {
        return data;
    }

    /**
     * 设置数据。
     * @param data 表示单个对象或集合。
     */
    public void setData(T data) {
        this.data = data;
    }

    /**
     * 获取数据行总数。
     * @return 数据行总数。
     */
    public int getTotal() {
        return total;
    }

    /**
     * 设置数据行总数。
     * @param total 数据行总数。
     */
    public void setTotal(int total) {
        this.total = total;
    }


    /**
     * Considerations of override, if there are new thing to be initialized.
     */
    @Override
    public void makeSuccess(String successfulMessage) {
        super.makeSuccess(successfulMessage);
    }

    /**
     * Considerations of override, if there are new thing to be initialized.
     */
    @Override
    public void makeFailure(String errorCode, String errorMessage) {
        super.makeFailure(errorCode, errorMessage);
    }
}
